Java অ্যানোটেশন একটি শক্তিশালী বৈশিষ্ট্য, যা কোডের মধ্যে অতিরিক্ত মেটাডেটা যোগ করতে এবং প্রক্রিয়া পরিচালনা করতে ব্যবহৃত হয়। Apache Tapestry তে, আপনি অ্যানোটেশনের মাধ্যমে ফিল্ড এবং মেথড কনফিগারেশন করতে পারেন। Tapestry বিভিন্ন ধরনের অ্যানোটেশন সরবরাহ করে, যেমন Dependency Injection, Event Handling, এবং Validation। এখানে আমরা কাস্টম অ্যানোটেশন ব্যবহার করে ফিল্ড এবং মেথড কনফিগারেশন করার পদ্ধতি ব্যাখ্যা করব।
ধাপ ১: অ্যানোটেশন ব্যবহার করে ফিল্ড কনফিগারেশন
Tapestry-তে ফিল্ড কনফিগারেশন করতে অ্যানোটেশন ব্যবহার করা একটি সাধারণ পদ্ধতি। ফিল্ডগুলিতে অ্যানোটেশন ব্যবহার করে ডেটা ভ্যালিডেশন, ডিপেন্ডেন্সি ইনজেকশন, এবং আরও অনেক কাজ করা যায়।
উদাহরণ: ফিল্ডে ডিপেন্ডেন্সি ইনজেকশন
Tapestry ফ্রেমওয়ার্কে @Inject অ্যানোটেশন ব্যবহার করে ফিল্ডে ডিপেন্ডেন্সি ইনজেক্ট করা হয়। এর মাধ্যমে আপনি সহজেই সার্ভিস বা অন্য ক্লাসের অবজেক্ট ইনজেক্ট করতে পারেন।
- Java ক্লাস (Service.java):
package com.example.services;
public class Service {
public String getServiceInfo() {
return "This is a service.";
}
}
- Java ক্লাস (MyPage.java):
package com.example.pages;
import com.example.services.Service;
import org.apache.tapestry5.annotations.Inject;
public class MyPage {
@Inject
private Service service; // Injecting the Service class instance
public String getServiceInfo() {
return service.getServiceInfo(); // Using the injected service
}
}
এখানে:
- @Inject অ্যানোটেশন ব্যবহার করে Service ক্লাসের ইনস্ট্যান্স MyPage ক্লাসে ইনজেক্ট করা হয়েছে। Tapestry ফ্রেমওয়ার্ক এটি স্বয়ংক্রিয়ভাবে ম্যানেজ করে।
ধাপ ২: অ্যানোটেশন ব্যবহার করে মেথড কনফিগারেশন
Tapestry তে মেথড কনফিগারেশন করার জন্য অ্যানোটেশন ব্যবহার করা হয়। মেথড অ্যানোটেশনগুলি সাধারণত ইভেন্ট হ্যান্ডলিং, অ্যাকশন ট্রিগার, এবং অন্যান্য কার্যকলাপ পরিচালনা করতে ব্যবহৃত হয়।
উদাহরণ: মেথডে ইভেন্ট হ্যান্ডলিং
Tapestry তে মেথডে @OnEvent অ্যানোটেশন ব্যবহার করে আপনি ব্যবহারকারীর ইন্টারঅ্যাকশনের জন্য ইভেন্ট হ্যান্ডলিং করতে পারেন।
- Java ক্লাস (MyPage.java):
package com.example.pages;
import org.apache.tapestry5.annotations.OnEvent;
public class MyPage {
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
// Handle the form submission event
@OnEvent(value = "submit", component = "loginButton")
public String onLogin() {
// Simulating login validation
if ("admin".equals(username)) {
return "Welcome, " + username;
} else {
return "Invalid username.";
}
}
}
এখানে:
- @OnEvent অ্যানোটেশন ব্যবহার করা হয়েছে, যা "submit" ইভেন্টটি loginButton থেকে গ্রহন করে onLogin() মেথডকে কল করবে।
- মেথডের মধ্যে, username এর মান যাচাই করা হচ্ছে এবং লগইন সফল হলে একটি বার্তা প্রদর্শন করা হচ্ছে।
ধাপ ৩: কাস্টম অ্যানোটেশন ব্যবহার
Tapestry তে আপনি কাস্টম অ্যানোটেশন তৈরি করে আপনার নিজের ফিল্ড এবং মেথড কনফিগারেশন যুক্ত করতে পারেন। এটি আপনাকে আপনার প্রয়োজনীয় কার্যকারিতা বাস্তবায়ন করতে সহায়তা করবে।
উদাহরণ: কাস্টম অ্যানোটেশন
ধরা যাক, আপনি একটি কাস্টম অ্যানোটেশন তৈরি করতে চান যা ফিল্ডের minLength চেক করবে।
- CustomValidation.java (কাস্টম অ্যানোটেশন):
package com.example.annotations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomValidation {
int minLength() default 5;
}
@Target(ElementType.FIELD): এটি নির্দেশ করে যে এই অ্যানোটেশনটি শুধুমাত্র ফিল্ডে ব্যবহার করা হবে।@Retention(RetentionPolicy.RUNTIME): এটি নিশ্চিত করে যে অ্যানোটেশনটি রানটাইমে উপলব্ধ থাকবে।
- User.java (কাস্টম অ্যানোটেশন ব্যবহার):
package com.example.pages;
import com.example.annotations.CustomValidation;
import org.apache.tapestry5.annotations.Property;
public class User {
@Property
@CustomValidation(minLength = 8) // Applying custom validation with a minimum length of 8
private String username;
@Property
@CustomValidation(minLength = 6) // Minimum length 6 for password
private String password;
// Getter and Setter for username and password
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
এখানে:
- @CustomValidation অ্যানোটেশন ব্যবহার করা হয়েছে username এবং password ফিল্ডে, যাতে তাদের minLength নিশ্চিত করা যায়।
ধাপ ৪: কাস্টম অ্যানোটেশন লজিক প্রয়োগ
এখন, আপনি আপনার কাস্টম অ্যানোটেশনটির জন্য validation logic তৈরি করবেন, যা ফিল্ডগুলির ভ্যালিডেশন করবে।
- CustomValidationService.java (কাস্টম ভ্যালিডেশন সার্ভিস):
package com.example.services;
import com.example.annotations.CustomValidation;
import java.lang.reflect.Field;
public class CustomValidationService {
// Method to validate fields with the CustomValidation annotation
public void validate(Object object) throws IllegalAccessException {
// Iterate over fields of the given object
for (Field field : object.getClass().getDeclaredFields()) {
// Check if the field is annotated with @CustomValidation
if (field.isAnnotationPresent(CustomValidation.class)) {
CustomValidation validation = field.getAnnotation(CustomValidation.class);
field.setAccessible(true);
String fieldValue = (String) field.get(object); // get the value of the field
// Validate the field value based on the minLength constraint
if (fieldValue != null && fieldValue.length() < validation.minLength()) {
throw new IllegalArgumentException("Field " + field.getName() + " must have at least " + validation.minLength() + " characters.");
}
}
}
}
}
এখানে:
- validate মেথডটি ইনপুট অবজেক্টের সকল ফিল্ড পরীক্ষা করে এবং CustomValidation অ্যানোটেশন প্রযোজ্য ফিল্ডের জন্য ভ্যালিডেশন কার্যকর করে।
সারাংশ
Tapestry তে অ্যানোটেশন ব্যবহার করে ফিল্ড এবং মেথড কনফিগারেশন করা খুবই সহজ এবং কার্যকর। আপনি @Inject বা @OnEvent অ্যানোটেশন ব্যবহার করে সার্ভিস ইনজেকশন এবং ইভেন্ট হ্যান্ডলিং করতে পারেন, এবং কাস্টম অ্যানোটেশন তৈরি করে আপনার নিজস্ব ভ্যালিডেশন এবং কার্যকারিতা যোগ করতে পারেন। অ্যানোটেশন ব্যবহার করার মাধ্যমে, কোড আরও পরিষ্কার, সহজ এবং রিইউজেবল হয়।